# -*- codeing = utf-8 -*-
#@Time : 2021/7/3 0003 上午 10:03
#@Author : baiguanghui
#@File : test1.py
#@Software : PyCharm

from tkinter import *
from tkinter import filedialog
from tkinter import messagebox
import os
import fnmatch
from tkinter.scrolledtext import ScrolledText

def search():
    kw = ent_search.get()
    type_str = ent_type.get()
    if not kw or not type_str:
        messagebox.showerror('警告','请先把关键字和类型输入完整再搜索')
        return
    path = filedialog.askdirectory()
    #print(path)
    fnlist = os.walk(path)#得到的是一个对象，对象里面是数组，列出文件夹下的文件及子文件
    # 数组中包含的三个部分：(1)用户选择的路径（2）该路径下的目录列表（3）该路径下的文件列表
    #print(fnlist)
    listBox.delete(0,END)
    for root,dirs,files in fnlist:  #root对应路径，dirs对应文件夹列表，files对应文件列表
        print(root)
        print(dirs)
        print(files)
        for i in fnmatch.filter(files,type_str):#符合type_str后缀类型的文件
            fn = '%s/%s'%(root,i)
            fn = fn.replace('\\','/')
            f = open(fn,'r',encoding='utf-8')
            if kw in f.read():
                listBox.insert(END,fn)
                f.close()
def edit(ee):
    fn = listBox.get(listBox.curselection())  #得到双击部分的链接
    #print(fn)
    fileWindow = Tk()
    fileWindow.geometry=('+800+200')
    text = ScrolledText(fileWindow,width=80,height=40)   #自带滚动条的输入框
    text.grid()
    text.insert(INSERT,open(fn,'r',encoding='utf-8').read())
    fileWindow.mainloop()

#创建窗口
root = Tk()  # 创建窗口
root.title('文件搜索软件')
#root.geometry('300x200+900+100')   #设置窗口的大小，设置窗口的位置

#输入框
Label(root,text='关键字').grid(row=0,column=0)  #创建标签Label;grid是布局,此时显示坐标默认位置：x=0,y=0
ent_search = Entry(root) #创建输入框,输入框位于root窗口
ent_search.grid(row=0,column=1) #显示/布局  也可以用pack

#文件类型
Label(root,text='文件类型').grid(row=0,column=2)
ent_type = Entry(root)
ent_type.grid(row=0,column=3)

#搜索按钮
btn = Button(root,text='搜 索',command=search)
btn.grid(row=0,column=4)

#列表框
listBox = Listbox(root,width=70)
listBox.bind('<Double-Button-1>',edit)
listBox.grid(row=1,columnspan=5)

root.mainloop()   # 显示窗口
